#include<stdio.h>
#include<unistd.h>
#include<string.h>
#include<stdlib.h>
#include<sys/wait.h>
#define NUMS 100
#define DEL " "
int main()
{
    while(1)
    {
        //打印[myshell@VM-8-13-centos dm8-1]#
        printf("[myshell@VM-8-13-centos dm8-1]# ");
        //刷新缓冲区
        fflush(stdout);
        //保存命令的数组
        char cmd[NUMS]={'\0'};
        memset(cmd,'\0',sizeof(cmd));
        fgets(cmd,sizeof(cmd),stdin);
        cmd[strlen(cmd)-1]='\0';
        //分割命令
        char *_argv[NUMS]={0};
        _argv[0]=strtok(cmd,DEL);
        int i=1;
        //增加配色
        if(strcmp(_argv[0],"ls")==0)
        {
            _argv[i++]="--color=auto";
        }
        while(_argv[i++]=strtok(NULL,DEL)); 
        //更改目录
        if(strcmp(_argv[0],"cd")==0)
        {
            if(_argv[1]!=NULL)
                chdir(_argv[1]);
            continue;
        }
        pid_t id=fork();
        if(id < 0)
        {
            printf("创建子进程失败\n");
            continue;
        }
        if(id==0)
        {
            printf("创建子进程成功\n");
            execvp(_argv[0],_argv);
            //如果没有替换成功
            exit(1);
        }
        else 
        {
            int status=0;
            //阻塞等待子进程
            int pid=waitpid(id,&status,0);
            if(pid > 0)
                printf("回收子进程成功，退出码：%d\n",WEXITSTATUS(status));
        }
    }
    return 0;
}
